stubdom: Rebuild the ocaml runtime libraries with the options needed
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 19 May 2009 13:17:56 +0000 (14:17 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 19 May 2009 13:17:56 +0000 (14:17 +0100)
if they are to be linked with object files created by ocamlc and the minios
kernel.

This is needed to build stubdoms written in ocaml.

Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
.hgignore
stubdom/Makefile
stubdom/caml/Makefile
stubdom/ocaml.patch [new file with mode: 0644]

index 17b24787dec3525e6bfc7cc68b0247d7cf6864e4..fb16719e2423eb09da003e47466403841201f19b 100644 (file)
--- a/.hgignore
+++ b/.hgignore
@@ -99,6 +99,7 @@
 ^stubdom/pciutils-.*$
 ^stubdom/zlib-.*$
 ^stubdom/grub-.*$
+^stubdom/ocaml-.*$
 ^stubdom/lwip/
 ^stubdom/ioemu/
 ^tools/.*/build/lib.*/.*\.py$
index 563c01aa565bab3816ab275e4169c21fbc1b2942..cd7234980d27e537a963355ee6b5f3bbe576c125 100644 (file)
@@ -27,6 +27,10 @@ LWIP_VERSION=1.3.0
 GRUB_URL?=$(XEN_EXTFILES_URL)
 GRUB_VERSION=0.97
 
+#OCAML_URL?=$(XEN_EXTFILES_URL)
+OCAML_URL?=http://caml.inria.fr/pub/distrib/ocaml-3.11
+OCAML_VERSION=3.11.0
+
 WGET=wget -c
 
 GNU_TARGET_ARCH:=$(XEN_TARGET_ARCH)
@@ -164,6 +168,37 @@ lwip-$(XEN_TARGET_ARCH): lwip-$(LWIP_VERSION).tar.gz
        patch -d $@ -p0 < lwip.patch-cvs
        touch $@
 
+#############
+# Cross-ocaml
+#############
+
+CAMLLIB = $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ocaml
+OCAML_STAMPFILE=$(CAMLLIB)/.dirstamp
+
+ocaml-$(OCAML_VERSION).tar.gz:
+       $(WGET) $(OCAML_URL)/$@
+
+ocaml-$(XEN_TARGET_ARCH)/.dirstamp: ocaml-$(OCAML_VERSION).tar.gz ocaml.patch
+       tar xzf $<
+       cd ocaml-$(OCAML_VERSION) && patch -p0 < ../ocaml.patch
+       rm -rf ocaml-$(XEN_TARGET_ARCH)
+       mv ocaml-$(OCAML_VERSION) ocaml-$(XEN_TARGET_ARCH)
+       touch $@
+
+MINIOS_HASNOT=IPV6 INET_ATON
+
+.PHONY: cross-ocaml
+cross-ocaml: $(OCAML_STAMPFILE)
+$(OCAML_STAMPFILE): ocaml-$(XEN_TARGET_ARCH)/.dirstamp
+       cd ocaml-$(XEN_TARGET_ARCH) &&  ./configure -prefix $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf \
+               -no-pthread -no-shared-libs -no-tk -no-curses \
+               -cc "$(CC) -U_FORTIFY_SOURCE -fno-stack-protector"
+       $(foreach i,$(MINIOS_HASNOT),sed -i 's,^\(#define HAS_$(i)\),//\1,' ocaml-$(XEN_TARGET_ARCH)/config/s.h ; )
+       $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) world
+       $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) opt
+       $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) install
+       touch $@
+
 #######
 # Links
 #######
@@ -251,7 +286,7 @@ ioemu: cross-zlib cross-libpci libxc
 
 .PHONY: caml
 caml: $(CROSS_ROOT)
-       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) 
+       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) OCAMLC_CROSS_PREFIX=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/bin/
 
 ###
 # C
@@ -289,7 +324,6 @@ ioemu-stubdom: APP_OBJS=$(CURDIR)/ioemu/i386-stubdom/qemu.a $(CURDIR)/ioemu/i386
 ioemu-stubdom: mini-os-$(XEN_TARGET_ARCH)-ioemu lwip-$(XEN_TARGET_ARCH) libxc ioemu
        DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_QEMU $(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS="$(APP_OBJS)"
 
-CAMLLIB = $(shell ocamlc -where)
 .PHONY: caml-stubdom
 caml-stubdom: mini-os-$(XEN_TARGET_ARCH)-caml lwip-$(XEN_TARGET_ARCH) libxc caml
        DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_CAML $(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS="$(CURDIR)/caml/main-caml.o $(CURDIR)/caml/caml.o $(CAMLLIB)/libasmrun.a"
@@ -351,6 +385,7 @@ crossclean: clean
        rm -fr zlib-$(XEN_TARGET_ARCH) pciutils-$(XEN_TARGET_ARCH)
        rm -fr libxc-$(XEN_TARGET_ARCH) ioemu
        rm -f mk-headers-$(XEN_TARGET_ARCH)
+       rm -fr ocaml-$(XEN_TARGET_ARCH)
 
 # clean patched sources
 .PHONY: patchclean
@@ -367,6 +402,7 @@ downloadclean: patchclean
        rm -f pciutils-$(LIBPCI_VERSION).tar.bz2
        rm -f grub-$(GRUB_VERSION).tar.gz
        rm -f lwip-$(LWIP_VERSION).tar.gz
+       rm -f ocaml-$(OCAML_VERSION).tar.gz
 
 .PHONY: distclean
 distclean: downloadclean
index d760fe4ee517ded2fde5dd9ffbeffed70a4ef1b2..5f27db67a333ff0d4a69e488a4f4c7c68c7d2ab5 100644 (file)
@@ -2,11 +2,10 @@ XEN_ROOT = ../..
 
 include $(XEN_ROOT)/Config.mk
 
-CAMLLIB = $(shell ocamlc -where)
+CAMLLIB = $(shell $(OCAMLC_CROSS_PREFIX)ocamlc -where)
 DEF_CPPFLAGS += -I$(CAMLLIB)
 
-OCAMLFIND=ocamlfind
-OCAMLOPT=ocamlopt
+OCAMLOPT=$(OCAMLC_CROSS_PREFIX)ocamlopt
 
 OBJS := hello.cmx
 LIBS := 
@@ -14,10 +13,10 @@ LIBS :=
 all: main-caml.o caml.o
 
 %.cmx: %.ml
-       $(OCAMLFIND) $(OCAMLOPT) -c $< -o $@
+       $(OCAMLOPT) -c $< -o $@
 
 caml.o: $(OBJS)
-       $(OCAMLFIND) $(OCAMLOPT) $(LIBS) $^ -output-obj -o $@
+       $(OCAMLOPT) $(LIBS) $^ -output-obj -o $@
 
 clean:
        rm -f *.a *.o *.cmx *.cmi
diff --git a/stubdom/ocaml.patch b/stubdom/ocaml.patch
new file mode 100644 (file)
index 0000000..50db486
--- /dev/null
@@ -0,0 +1,19 @@
+--- byterun/Makefile.orig      2009-04-07 12:14:02.000000000 +0100
++++ byterun/Makefile   2009-04-07 12:13:50.000000000 +0100
+@@ -22,14 +22,14 @@
+ DOBJS=$(OBJS:.o=.d.o) instrtrace.d.o
+ PICOBJS=$(OBJS:.o=.pic.o)
+-#ifeq ($(SUPPORTS_SHARED_LIBRARIES),true)
++ifeq ($(SUPPORTS_SHARED_LIBRARIES),true)
+ all:: libcamlrun_shared.so
+ install::
+       cp libcamlrun_shared.so $(LIBDIR)/libcamlrun_shared.so
+-#endif
++endif
+ ocamlrun$(EXE): libcamlrun.a prims.o
+       $(MKEXE) $(BYTECCLINKOPTS) -o ocamlrun$(EXE) \